//
//  HomeUITabBarController.swift
//  MXWeiBo
//
//  Created by Apple on 16/2/21.
//  Copyright © 2016年 Applea. All rights reserved.
//

import UIKit
import YYModel
import AFNetworking
//设置微博可重用标识符
private let MXWeiBoCellStr="MXWeiBoCellStr"
//微博提示可重用标识符
private let MXStatusTipCellID = "MXStatusTipCellID"
class HomeUITabBarController: RootViewCollect {

    override func viewDidLoad() {
        
        // 设置刷新控件,因为要先显示刷新控件，所以要在调用父类前面
        setupRrfresh()
//        调用 RootViewController 的viewDidLoad 会直接调用 loadData
        super.viewDidLoad()

        

        
//        注册可重用cell
        tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: MXWeiBoCellStr)
        tableView.registerClass(StatusTipCell.self, forHeaderFooterViewReuseIdentifier: MXStatusTipCellID)
//        设置访客视图
        visitorView?.setupInfo(message: "关注一些人，回这里看看有什么惊喜")
//        添加nav和item
//      注册网络连接监听
        NSNotificationCenter.defaultCenter().addObserver(self,
            selector: "reachabilityChanged",
            name: AFNetworkingReachabilityDidChangeNotification,
            object: nil)
    }
//    移除通知
    deinit {
    NSNotificationCenter.defaultCenter().removeObserver(self, name: AFNetworkingReachabilityDidChangeNotification, object: nil)
    }
//    网路连接状态监听方法
    @objc private func reachabilityChanged() {
//     刷新表格的第一个分组
        self.tableView.reloadSections(NSIndexSet(index: 0), withRowAnimation: .Automatic)
    }
//    接收到内存警告
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        
//        如果视图当前正在显示，window 不为 nil
//        注意：swift 中lazy 的属性千万不要设置成nil
        if self.view.window == nil {
//        1.清理数组
            self.statusList.removeAll()
//            2.刷新数据
            self.loadData()
        }
    }
//  MARK: -- 私有属性
//    ------------------NO－－－－－－－－－－－－－－
    private lazy var statusList = [Status]()
    //    ------------------NO－－－－－－－－－－－－－－
    override func loadData() {
     
        refreshControl?.beginRefreshing()

        // 设置起始值
//        let startNum = 100
////       1. 判断是否是上拉刷新 如果上拉刷新启动，则是上拉刷新
        let isPullUP = refreshControl?.isPullupRefresh ?? false
        
//    显示刷新控件
            refreshControl?.beginRefreshing()
//        下拉索引 － 去数组第一项 id
        let since_id = isPullUP ? 0 :(self.statusList.first?.id ?? 0)
//        上拉索引 － 取数组最后一项
        let max_id = !isPullUP ? 0 :(self.statusList.last?.id ?? 0)
//        加载微博数据
        NetworkTools.sharedTools.loadStatus { (result) -> () in
//        结束刷新
            self.refreshControl?.endRefreshing()
//           [String: AnyObject] => [[String: AnyObject]] 转换成字典
            guard let array = result?["statuses"] as? [[String : AnyObject]] else {
            print("您的网络不给力")
                return
            }
//            遍历数组，字典转模型
            var arrayM = [Status]()
            for dict in array {
                    arrayM.append(Status.yy_modelWithJSON(dict))}
           
            print(arrayM)
            
            if max_id > 0 {
            self.statusList += arrayM
            } else {
            self.statusList = arrayM + self.statusList
            }
//            刷新数据
            self.statusList = arrayM + self.statusList
            
//            刷新表格
            self.tableView.reloadData()
        }

        
        
////        模拟异步加载数据加载数据
//     
//        dispatch_async(dispatch_get_global_queue(0, 0)) { () -> Void in
//
//            NSThread.sleepForTimeInterval(2.0)
////            下拉刷新 获取数组的第 0 条数据值,以便按顺序相加,有可能数组没有值，所以用 ??
//            
//            let nextNum=self.dataList.first ?? startNum
////            上拉刷新，获取数组的最后一个数字， 将数据添加到数组最后
//            let pullNum = self.dataList.last ?? 0
////            模拟网络一次加载的数据
//            var dataArray=[Int]()
//            
//
//            if pullStart {
//                for i in (0..<10)
//                {
//                    dataArray.append(pullNum - i - 1)
//                }
//
//            }
//            else {
//                
//                for i in (0..<10).reverse()
//                {
//                    dataArray.append(i + nextNum + 1)
//                }
//            }
////            如果是上拉刷新，要将数据添加到数组最后
//            if pullStart {
//              self.dataList += dataArray
//            }
//            else
//            {
////            下拉刷新要插入到现有的 dataList 的前面
//            self.dataList=dataArray + self.dataList
//            }
////            更新UI
//            dispatch_async(dispatch_get_main_queue(), { () -> Void in
//                
////                关闭刷新
//                self.refreshControl.endRefreshing()
////                如果不停止上拉刷新，则会一直添加数据
////                刷新表格
//                self.tableView.reloadData()
//            })
//            
//        }
//        
////
    }

//   MARK： 私有属性
 private lazy var dataList=[Int]()
}

extension HomeUITabBarController{

    func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 2
    }
    
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        
//        分组0对应的是提示 cell ，如果（网路连接没有）需要提示，才返回1
        if (section == 0)
        {
            return NetworkTools.sharedTools.reachable ? 0 : 1
        }
//        分组 1 对应正常的微博 cell
         return self.statusList.count
    }
    
//    设置cell
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
//     分组 0 对应的是提示 cell
        if indexPath.section == 0 {
    return tableView.dequeueReusableCellWithIdentifier(MXStatusTipCellID, forIndexPath: indexPath)
        }
        let cell=tableView.dequeueReusableCellWithIdentifier(MXWeiBoCellStr, forIndexPath: indexPath)
        
        cell.textLabel?.text=statusList[indexPath.row].text
        return cell
        
    }
    
}
